package com.zh.hive;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

import org.apache.commons.lang.StringUtils;
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;

/**
 * 原有的格式：31/Aug/2015:00:04:53 +0800
 * 
 * 理想格式：2017-12-24 00:04:53
 * 
 * 
 * hive commod: 
 * 
 * 1.临时函数
 * 添加JAR包
 * add jar /opt/datas/DateUDF.jar;
 * 创建函数
 * create temporary function pdate as 'com.zh.hive.TestDateUDF';
 * 使用函数
 * select pdate(time_local) from log_src limit 10;
 * 
 * 2.永久函数
 * jar包放在HDFS上(也算是一个永久的方法)
 * create function pdate2 as 'ibeifeng.hadoop.TestDateUDF' using jar 'hdfs://bigdata00:8020/DateUDF.jar';
 * 
 */

public class TestDateUDF extends UDF {

	// 定义输入，传进来的日期格式
	public SimpleDateFormat inputDate = new SimpleDateFormat(
			"dd/MMM/yyyy:HH:mm:ss", Locale.ENGLISH);
	// 定义输出的日期格式
	public SimpleDateFormat outputDate = new SimpleDateFormat(
			"yyyy-MM-dd HH:mm:ss");

	public Text evaluate(Text time) {

		if (time == null) {
			return null;
		}
		// 判断time的值是否符合，isBlank能够识别转义字符
		if (StringUtils.isBlank(time.toString())) {
			return null;
		}
		// 去除双引号
		String parse = time.toString().replaceAll("\"", "");
		try {
			Date parseDate = inputDate.parse(parse);
			String formatDate = outputDate.format(parseDate);
			return new Text(formatDate);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return null;
	}
	
	public static void main(String[] args) {
		System.out.println(new TestDateUDF().evaluate(new Text("\"31/Aug/2015:00:04:53 +0800\"")));
	}

}
